package com.torresquintero.oncologos.entidades;

import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;

/**
 * Entidad que representa el detalle historia clinica.
 *
 */
@Entity
@NamedQueries({
	@NamedQuery(name=DetalleHistoriaClinica.FIND_DETALLE_HISTORIA_CLINICA_BY_ID_CONSULTA,query="select det from DetalleHistoriaClinica det where det.consulta.id=:"+DetalleHistoriaClinica.PARAMETRO_ID_CONSULTA),
	@NamedQuery(name=DetalleHistoriaClinica.FIND_DETALLE_HISTORIA_CLINICA_BY_ID_HISTORIA_CLINICA,query="select det from DetalleHistoriaClinica det where det.historia.id=:"+DetalleHistoriaClinica.PARAMETRO_ID_HISTORIA_CLINICA),
	@NamedQuery(name=DetalleHistoriaClinica.FIND_DETALLE_HISTORIA_CLINICA_ORDENADO_POR_FECHA,query="SELECT det FROM DetalleHistoriaClinica det ORDER BY det.historia.fechaApertura ASC"),
	@NamedQuery(name=DetalleHistoriaClinica.FIND_ALL,query="select det from DetalleHistoriaClinica det")
	//TODO:NamedQuery de todos los detalles de una historia ordenados por fecha de mayor a menor.
})
public class DetalleHistoriaClinica implements Serializable {
	
	/**
	 * Constante para la named Query de buscar todos los detalles de historias clinicas.
	 */
	public static final String FIND_ALL = "DetalleHistoriaClinica.findAll";
	
	/**
	 * Constante para la named query de buscar todos los dealles de la historia clinica ordenador por fecha de mayor a menor.
	 */
	public static final String FIND_DETALLE_HISTORIA_CLINICA_ORDENADO_POR_FECHA="DetalleHistoriaClinica.findDetalleHistoriaClinicaOrdenadoPorFecha";
   
	/**
	 * Constante para la named query de buscar DetalleHistoriaClinica por id historia clinica.
	 */
	public static final String FIND_DETALLE_HISTORIA_CLINICA_BY_ID_HISTORIA_CLINICA="DetalleHistoriaClinica.findDetalleHistoriaClinicaByIdHistoriaClinica";
	
	/**
	 * Constante para el parametro de id de la historia clinica de un paciente.
	 */
	public static final String PARAMETRO_ID_HISTORIA_CLINICA="idHistoriaClinica";
	
	/**
	 * Constante para la named query de buscar DetalleHistoriaClinica por id de la consulta.
	 */
	public static final String FIND_DETALLE_HISTORIA_CLINICA_BY_ID_CONSULTA="DetalleHistoriaClinica.findDetalleHistoriaClinicaByIdConsulta";
	
	/**
	 * Constante para el parametro de id de la consulta.
	 */
	public static final String PARAMETRO_ID_CONSULTA="idConsulta";

	/**
	 * Constante de serializacion
	 */
	private static final long serialVersionUID = 1L;
	
   /**
    * Identificador unico e la entidad.
    */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long id;
	
	/**
	 * Historia clinica.
	 */
	@JoinColumn(name="HISTORIA_CLINICA")
	@ManyToOne
	private HistoriaClinica historia;
	
	/**
	 * Consulta donde se escribio este detalle.
	 */
	@JoinColumn(name="CONSULTA")
	@OneToOne(optional = true)
	private Consulta consulta;
	
	/**
	 * Comentario del historial.
	 */
	@Basic(optional = true)
	private String comentario;

	public DetalleHistoriaClinica() {
		super();
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the historia
	 */
	public HistoriaClinica getHistoria() {
		return historia;
	}

	/**
	 * @param historia the historia to set
	 */
	public void setHistoria(HistoriaClinica historia) {
		this.historia = historia;
	}

	/**
	 * @return the consulta
	 */
	public Consulta getConsulta() {
		return consulta;
	}

	/**
	 * @param consulta the consulta to set
	 */
	public void setConsulta(Consulta consulta) {
		this.consulta = consulta;
	}

	/**
	 * @return the comentario
	 */
	public String getComentario() {
		return comentario;
	}

	/**
	 * @param comentario the comentario to set
	 */
	public void setComentario(String comentario) {
		this.comentario = comentario;
	}   
	
	
   //TODO:falta toString
}
